package cn.zmit.kuxi.image;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

public class ImageDisplayer {
	// 私有化构造函数，防止创建对象
	private ImageDisplayer() {
	}

	private static class ImageDisplayerHolder {
		public static final ImageDisplayer INSTANCE = new ImageDisplayer();
	}

	public static ImageDisplayer getInstance() {
		return ImageDisplayerHolder.INSTANCE;
	}

	/**
	 * 圆角加载图片（重载函数）（此处为5）（缩放模式为IN_SAMPLE_POWER_OF_2）
	 * 
	 * @param imageUrl
	 *            图片地址
	 * @param view
	 *            要显示的ImageView
	 */
	public void dispalyImageWithRadius(String imageUrl, ImageView view) {
		dispalyImageWithRadius(imageUrl, view,
				ImageScaleType.IN_SAMPLE_POWER_OF_2, 5);
	}

	/**
	 * 圆角加载图片（重载函数）（缩放模式为IN_SAMPLE_POWER_OF_2）
	 * 
	 * @param imageUrl
	 *            图片地址
	 * @param view
	 *            要显示的ImageView
	 * @param radius
	 *            圆角
	 */
	public void dispalyImageWithRadius(String imageUrl, ImageView view,
			int radius) {
		dispalyImageWithRadius(imageUrl, view,
				ImageScaleType.IN_SAMPLE_POWER_OF_2, radius);
	}

	List<String> displayedImages = Collections
			.synchronizedList(new LinkedList<String>());

	/**
	 * 圆角加载图片
	 * 
	 * @param imageUrl
	 *            图片地址
	 * @param view
	 *            要显示的ImageView
	 * @param imageScaleType
	 *            图片缩放模式
	 */
	public void dispalyImageWithRadius(String imageUrl, ImageView view,
			ImageScaleType imageScaleType, int radius) {
		ImageLoader.getInstance().displayImage(imageUrl, view,
				ImageLoaderConfig.ptions(imageScaleType, radius),
				new ImageLoadingListener() {

					@Override
					public void onLoadingStarted(String imageUri, View view) {

					}

					@Override
					public void onLoadingFailed(String imageUri, View view,
							FailReason failReason) {

					}

					@Override
					public void onLoadingComplete(String imageUri, View view,
							Bitmap loadedImage) {

						if (loadedImage != null) {
							ImageView imageView = (ImageView) view;
							boolean firstDisplay = !displayedImages
									.contains(imageUri);
							if (firstDisplay) {
								FadeInBitmapDisplayer.animate(imageView, 1500);
								displayedImages.add(imageUri);
							}
						}

					}

					@Override
					public void onLoadingCancelled(String imageUri, View view) {

					}
				});
	}
}
